package com.example.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.domain.Book;
import com.example.domain.Category;
import com.example.dto.BookAddDTO;
import com.example.dto.BookUpdateDTO;
import com.example.util.Result;
import com.example.vo.BookWithLocationVO;

import java.util.List;

/**
* @author HP
* @description 针对表【book】的数据库操作Service
* @createDate 2025-08-18 19:31:05
*/
public interface BookService extends IService<Book> {

    /**
     * 检查图书是否存在
     * @param id 图书ID
     * @return 是否存在
     */
    boolean existsById(Long id);

    /**
     * 添加图书
     * @param book 图书信息
     * @return 是否添加成功
     */
//    @Override
//    boolean save(Book book);

    /**
     * 更新图书信息
     * @param book 图书信息
     * @return 是否更新成功
     */
//    @Override
//    boolean updateById(Book book);

//    @Override
//    boolean removeById(Book book);

    /**
     * 删除图书并记录操作日志
     * @param id 图书ID
     * @param operatorId 操作人ID
     * @param operatorName 操作人名称
     * @param ip IP地址
     * @return 是否删除成功
     */
//    boolean removeById(Long id, Long operatorId, String operatorName, String ip);

    /**
     * 根据分类ID查询图书
     * @param categoryId 分类ID
     * @return 图书列表
     */
    List<Book> getBooksByCategoryId(Long categoryId);

    /**
     * 获取所有图书分类
     * @return 分类列表
     */
    List<Category> getAllCategories();

    /**
     * 检查分类是否存在
     * @param categoryId 分类ID
     * @return 是否存在
     */
    boolean existsCategory(Long categoryId);

    /**
     * 根据条件查询图书列表
     * @param book 查询条件
     * @return 图书列表
     */
    List<Book> queryBooks(Book book);

    Result addBook(BookAddDTO bookAddDTO);

    Result updateBook(BookUpdateDTO bookUpdateDTO);

    Result removeBook(Long id);
    
    /**
     * 根据ID获取带位置信息的图书
     * @param id 图书ID
     * @return 带位置信息的图书
     */
    BookWithLocationVO getBookWithLocationById(Long id);
    
    /**
     * 查询带位置信息的图书列表
     * @param queryBook 查询条件
     * @return 带位置信息的图书列表
     */
    List<BookWithLocationVO> queryBooksWithLocation(Book queryBook);
}
